package cn.tedu.bigdecimal;

import java.math.BigDecimal;
import java.util.Scanner;

/**本类用作浮点数运算不精确解决方案*/
public class TestBigDecimal {
    public static void main(String[] args) {
//        f1();//使用普通的浮点数四则运算
        f2();//使用bigDecimal解决浮点数运算不精确的问题
    }

    private static void f1() {
        System.out.println("请输入您要计算的第一个小数：");
        double d1=new Scanner(System.in).nextDouble();
        System.out.println("请输入您要计算的第二个小数：");
        double d2=new Scanner(System.in).nextDouble();
        System.out.println(d1+d2);
        System.out.println(d1-d2);
        System.out.println(d1*d2);
        System.out.println(d1/d2);
    }
    private static void f2() {
        System.out.println("请输入您要计算的第一个小数：");
        double d1=new Scanner(System.in).nextDouble();
        System.out.println("请输入您要计算的第二个小数：");
        double d2=new Scanner(System.in).nextDouble();
        /**1.最好不要使用double作为构造函数的参数，
         * 不然还会有不精确的现象，有坑！
         * 2.我们一般使用String类型作为构造函数的参数
         * 3.double转String，直接拼个空串就可以*/
        BigDecimal bd1 = new BigDecimal(d1+"");
        BigDecimal bd2 = new BigDecimal(d2+"");

        BigDecimal bd3;//保存结果
        bd3 = bd1.add(bd2);//做加法运算
        System.out.println(bd3);
        bd3 = bd1.subtract(bd2);//做减法运算
        System.out.println(bd3);
        bd3=bd1.multiply(bd2);//做乘法运算
        System.out.println(bd3);
        //divide(除谁，保留位数，舍入方式[四舍五入]):做除法运算
        bd3=bd1.divide(bd2,3,BigDecimal.ROUND_HALF_UP);//做除法运算
        System.out.println(bd3);
        BigDecimal bd4;
        bd4=bd1.divide(bd2,0,BigDecimal.ROUND_HALF_EVEN);
        System.out.println(bd4);
    }
}
